package com.jackrain.nea.common;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jackrain.nea.util.ValueHolder;

import java.util.HashMap;
import java.util.List;

public class ValueHolderUtils {


    /**
     * 自定义失败数据 -- 依赖方法引用，不作为直接返回数据
     *
     * @param object  返回结果集
     * @param message 错误信息
     * @param id      错误对象主键ID
     */
    public static void addFailData(JSONObject object, String message, Long id) {
        // 错误数据集名称
        String ERROR_KEY = "data";
        // 拼装错误信息对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", id);
        jsonObject.put("code", -1);
        jsonObject.put("message", message);
        // 更新原来错误数据集
        if (object.get(ERROR_KEY) != null && object.get(ERROR_KEY).toString().length() > 0) {
            JSONArray array = (JSONArray) JSONObject.parse(object.get(ERROR_KEY).toString());
            array.add(jsonObject);
            object.put(ERROR_KEY, array);
        } else {
            JSONArray array = new JSONArray();
            array.add(jsonObject);
            object.put(ERROR_KEY, array);
        }
    }


    /**
     * 创建成功添加数据后的返回值
     *
     * @param tableName 当前操作数据库表名
     * @param id        当前操作主表ID(单表为本身)
     * @return
     */
    public static JSONObject createAddErrorData(String tableName, Long id, Object data) {
        JSONObject object = new JSONObject();
        object.put("tablename", tableName);
        object.put("objid", id);
        object.put("error", data);
        return object;
    }

    /**
     * 通用返回数据 - 2017.10.31 规范
     *
     * @return
     */
    public static ValueHolder success() {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", 0);
        valueHolder.put("message", "保存成功！");
        return valueHolder;
    }

    public static ValueHolder success(JSONObject ret) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", 0);
        valueHolder.put("message", "保存成功！");
        valueHolder.put("ret",ret);
        return valueHolder;
    }

    /**
     * 通用返回数据
     *
     * @return
     */
    public static ValueHolder success(String message) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", 0);
        valueHolder.put("message", message);
        return valueHolder;
    }

    /**
     * 通用返回数据
     *
     * @param message
     * @param data
     * @return
     */
    public static ValueHolder success(String message, Object data) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", 0);
        valueHolder.put("message", message);
        valueHolder.put("data", data);
        return valueHolder;
    }

    /**
     * 通用返回数据
     * @param message
     * @param data
     * @param ret
     * @return
     */

    public static ValueHolder success(String message, Object data,JSONObject ret) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", 0);
        valueHolder.put("message", message);
        valueHolder.put("data", data);
        valueHolder.put("ret",ret);
        return valueHolder;
    }
    /**
     * 返回失败数据
     *
     * @param message
     * @param data
     * @return
     */
    public static ValueHolder fail(String message, Object data) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", -1);
        valueHolder.put("message", message);
        valueHolder.put("data", data);
        return valueHolder;
    }

    /**
     * 返回失败数据
     *
     * @param message
     * @return
     */
    public static ValueHolder fail(String message) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", -1);
        valueHolder.put("message", message);
        return valueHolder;
    }

    /**
     * 通用返回失败数据
     *
     * @param code
     * @param message
     * @param data
     * @return
     */
    public static ValueHolder custom(Integer code, String message, Object data) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", code);
        valueHolder.put("message", message);
        valueHolder.put("data", data);
        return valueHolder;
    }

    /**
     *
     * @param code
     * @param message
     * @param data
     * @param ret
     * @return
     */
    public static ValueHolder custom(Integer code, String message, Object data,JSONObject ret) {
        ValueHolder valueHolder = new ValueHolder();
        valueHolder.put("code", code);
        valueHolder.put("message", message);
        valueHolder.put("data", data);
        valueHolder.put("ret",ret);
        return valueHolder;
    }

    /**
     * 通用菜单栏查询返回数据封装
     *
     * @param list 查询数据
     */
    public static JSONObject queryDataResult(List<HashMap<String, Object>> list) {
        JSONObject result = new JSONObject();
        JSONObject object = null;
        JSONArray array = new JSONArray();
        for (HashMap<String, Object> map : list) {
            object = new JSONObject();
            object.put("exclude", false);
            object.put("screen", map.get("ID") == null ? map.get("id") : map.get("ID"));
            for (String key : map.keySet()) {
                if (!"id".equalsIgnoreCase(key.toString())) {
                    object.put("screen_string", map.get(key));
                }
            }
            array.add(object);
        }
        object = new JSONObject();
        object.put("result", array);
        result.put("text", object);
        return result;
    }


}
